library(tidyverse)
library(sf)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(ggplot2)
library(plotly)Riqueza de especies de arácnidos en Áreas Protegidas de Costa Rica
Presentación
Este documento muestra la riqueza de especies de arácnidos (clase Arachnida) en áreas silvestres protegidas (ASP) de Costa Rica.
Fuentes de datos:
- Registros de presencia de arácnidos: Consulta al sistema mundial de información en biodiversidad (GBIF)
- Polígonos de ASP: [servicio WFS] (https://geos1pne.sirefor.go.cr/wfs) del Sistema Nacional de Áreas de conservación.
Carga de paquetes
Carga de datos
Áreas Silvestres Protegidas
asp <-
st_read("asp.gpkg", quiet = TRUE) |>
st_transform(4326) |>
st_make_valid()
plot(asp$geom)
Registros de presencia de arácnidos
# Lectura y visualización de datos geoespaciales de arácnidos
# Lectura
aracnidos <-
st_read("aracnidos.csv",
options = c(
"X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
"Y_POSSIBLE_NAMES=decimalLatitude" # columna de latitud decimal
),
quiet = TRUE
)
# Asignación del CRS WGS84
st_crs(aracnidos) <- 4326
# Visualización en un mapa
plot(
aracnidos$geometry,
pch = 16,
main = "Mamíferos de Costa Rica",
axes = TRUE,
graticule = TRUE
)
Cantidad de registros de presencia por especie
#|label: grafico-registros-x-especie
registros_aracnidos_x_especie <-
aracnidos |>
st_drop_geometry() |>
group_by(species) |>
summarise(cantidad_registros = n()) |>
filter(species != "")
grafico_ggplot2 <-
registros_aracnidos_x_especie |>
arrange(desc(cantidad_registros)) |>
slice(1:10) |>
ggplot(aes(x = reorder(species, -cantidad_registros), y = cantidad_registros)) +
geom_col() +
coord_flip() +
xlab("Especies de arácnidos") +
ylab("Cantidad de especies") +
ggtitle("Cantidad de especies de arácnidos")
ggplotly(grafico_ggplot2) |> config(locale = "es")Mapa de distribución de la especie Centruroides limbatus
centruroides_limbatus <-
aracnidos |>
filter(species == "Centruroides limbatus")leaflet() |>
setView(
lng = -84,
lat = 10,
zoom = 7
) |>
addProviderTiles(provider = providers$CartoDB.Positron, group = "Mapa base") |>
addPolygons(
data = asp,
color = "darkgreen",
weight = 1.5,
stroke = TRUE
) |>
addCircleMarkers(
data = centruroides_limbatus,
color = "black",
radius = 4,
stroke = FALSE,
group = "Centruroides limbatus",
) |>
addLayersControl(
baseGroups = c("Carto Positron"),
overlayGroups = c("ASP", "Centruroides limbatus")
)Mapa de riqueza de especies de arácnidos en ASP
- Unión espacial de arácnidos y ASP
aracnidos_union_asp <-
st_join(
x = aracnidos,
y = dplyr::select(asp, codigo),
join = st_within
)- Conteo de la cantidad de especies de arácnidos de cada ASP
riqueza_especies_aracnidos_asp <-
aracnidos_union_asp |>
st_drop_geometry() |>
group_by(codigo) |>
summarise(riqueza_especies_aracnidos = n_distinct(species, na.rm = TRUE))- Unión de geometrías de ASP con dataframe de riqueza de especies
asp_union_riqueza <-
left_join(
x = asp,
y = dplyr::select(riqueza_especies_aracnidos_asp, codigo, riqueza_especies_aracnidos),
by = "codigo",
) |>
replace_na(list(riqueza_especies_aracnidos_asp = 0))- Mapa de riqueza de especies
# Paleta de colores de riqueza de especies
colores_riqueza_especies <-
colorNumeric(
palette = "Reds",
domain = asp_union_riqueza$riqueza_especies_aracnidos,
na.color = "transparent"
)
# Mapa leaflet
leaflet() |>
setView(
lng = -84.19452,
lat = 9.572735,
zoom = 7) |>
addTiles(group = "Mapa general (OpenStreetMap)") |>
addProviderTiles(
providers$Esri.WorldImagery,
group = "Imágenes satelitales (ESRI World Imagery)"
) |>
addPolygons(
data = asp_union_riqueza,
fillColor = ~ colores_riqueza_especies(asp_union_riqueza$riqueza_especies_aracnidos),
fillOpacity = 0.8,
color = "black",
stroke = TRUE,
weight = 1.0,
popup = paste(
paste("<strong>ASP:</strong>", asp_union_riqueza$nombre_asp),
paste("<strong>Riqueza de especies:</strong>", asp_union_riqueza$riqueza_especies_aracnidos),
sep = '<br/>'
),
group = "Riqueza de especies"
) |>
addScaleBar(
position = "bottomleft",
options = scaleBarOptions(imperial = FALSE)
) |>
addLegend(
position = "bottomleft",
pal = colores_riqueza_especies,
values = asp_union_riqueza$riqueza_especies_aracnidos,
group = "Riqueza de especies",
title = "Riqueza de especies"
) |>
addCircleMarkers(
data = aracnidos,
stroke = F,
radius = 4,
fillColor = "black",
fillOpacity = 1.0,
popup = paste(
paste0("<strong>Especie: </strong>", aracnidos$species),
paste0("<strong>Localidad: </strong>", aracnidos$locality),
paste0("<strong>Fecha: </strong>", aracnidos$eventDate),
paste0("<strong>Fuente: </strong>", aracnidos$institutionCode),
paste0("<a href='", aracnidos$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
group = "Registros de presencia"
) |>
addLayersControl(
baseGroups = c(
"Mapa general (OpenStreetMap)",
"Imágenes satelitales (ESRI World Imagery)"
),
overlayGroups = c(
"Riqueza de especies",
"Registros de presencia"
)
) |>
addResetMapButton() |>
addSearchOSM() |>
addMouseCoordinates() |>
addFullscreenControl() |>
hideGroup("Registros de presencia")